package heap

// 代表一个java实例对象的结构体
type Object struct {
	// 关联的方法区中的Class结构体
	class *Class
	// 这个对象的实例变量，对应的就是非静态的变量
	// 用来存放数组对象的各个值，或者存放普通对象的实例变量
	data interface{}
	// 这个对象所属的堆区中的Class对象的指针
	extra interface{}
}

// 判断一个对象是不是给定的类的实例
func (self *Object) IsInstanceOf(class *Class) bool {
	return self.class.IsAssignableFrom(class)
}


// get方法
func (self *Object)Fields() Slots {
	return self.data.(Slots)
}

func (self *Object)Class() *Class {
	return self.class
}

func (self *Object) SetRefVar(fieldName string, fieldDesc string, value *Object) {
	field := self.class.GetFieldByNameAndDesc(fieldName, fieldDesc, false)
	objectFields := self.Fields()
	objectFields.SetRef(field.slotId,value)

}

func (self *Object) GetRefVar(fieldName string, fieldDesc string) *Object {
	field := self.class.GetFieldByNameAndDesc(fieldName, fieldDesc, false)
	objectFields := self.Fields()
	return objectFields.GetRef(field.slotId)
}

